home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / REALCTRL.D < prev    next >
Encoding:
Modula Definition  |  1990-07-17  |  2.4 KB  |  68 lines

  1. DEFINITION MODULE RealCtrl;
  2.  
  3. (*
  4.  * Dies Modul dient zur Verwaltung, Unterscheidung und Auswertung
  5.  * der beiden bei Megamax Modula-2 verwendeten Real-Formaten.
  6.  *
  7.  * Beachte:
  8.  *   Das IEEE-Format hat eine größere Genauigkeit durch eine größere
  9.  *   Mantisse, das Megamax-Format überdeckt einen größeren Bereich
  10.  *   durch einen größeren Exponenten.
  11.  *)
  12.  
  13. TYPE AnyRealFormat = (MM2Real, IEEEReal, unspecReal);
  14.      RealFormat    = [MM2Real..IEEEReal];
  15.  
  16.      AnyReal = RECORD
  17.                  value: LONGREAL;
  18.                  format: RealFormat;
  19.                END;
  20.  
  21. VAR UsedFormat: AnyRealFormat;
  22.   (*
  23.    * Zeigt an, welches Darstellungsformat z.Zt. für Real-Werte
  24.    * verwendet wird. Solange kein Modul resident ist, das Reals
  25.    * benutzt, ist das Format unbestimmt (unspecReal). Ist es
  26.    * einmal bestimmt, weist der Loader Module, die Real-Konstanten
  27.    * im anderen Format enthalten, zurück.
  28.    *
  29.    * Keinesfalls darf diese Variable von Anwenderprogrammen, auch nicht
  30.    * kurzzeitig, verändert werden!
  31.    *)
  32.  
  33. PROCEDURE SmallREAL     (format: RealFormat): LONGREAL;
  34. PROCEDURE LargeREAL     (format: RealFormat): LONGREAL;
  35. PROCEDURE SmallLONGREAL (format: RealFormat): LONGREAL;
  36. PROCEDURE LargeLONGREAL (format: RealFormat): LONGREAL;
  37.   (*
  38.    * Liefern (ungefähr) größte und kleinste positive darstellbare
  39.    * REAL-Werte des angegebenen Formats im selben Format.
  40.    * Für das aktuelle Format ist 'UsedFormat' anzugeben.
  41.    *
  42.    * Beispiel:
  43.    *   LargeREAL (IEEEReal) liefert die größte REAL-Zahl
  44.    * bei IEEE-Darstellung eben in IEEE-Darstellung.
  45.    *)
  46.  
  47. CONST InfiniteIEEE = 7FF0000000000000R;
  48.       NullIEEE     = 0R;
  49.  
  50. PROCEDURE Conv (in: AnyReal; out: RealFormat): LONGREAL;
  51.   (*
  52.    * Der Wert 'in' wird ins Format 'out' gewandelt.
  53.    * Für das aktuelle Format ist 'UsedFormat' anzugeben.
  54.    *
  55.    * Beim Wandeln von IEEE nach MM2 gehen u.U. die untersten Bits
  56.    * der Mantisse verloren, sodaß der Wert ungenauer wird.
  57.    * Beim Wandeln von MM2 nach IEEE werden Werte nahe bei Null
  58.    * (Exponent kleiner als -308) zu Null, bei zu großen Werten
  59.    * wird die IEEE-Zahl "infinity" (positiv bzw. negativ) geliefert,
  60.    * welche durch Vergleich mit der Konstante 'InfiniteIEEE' (s.o.)
  61.    * erkannt werden kann (Vorzeichen beachten!).
  62.    *
  63.    * Beispiel, um einen Wert immer im IEEE-Format zu erhalten:
  64.    *   ieeeZahl:= Conv (AnyReal {realZahl, UsedFormat}, IEEEForm)
  65.    *)
  66.  
  67. END RealCtrl.
  68.